#!/bin/bash

# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# This is a generic script for upgrading the host toolchain. It should:
# - be able to run repeatedly, in case someone has ancient chroot with
#   several missed gcc upgrades
# - be easily tweakable for future upgrades of the same kind, if needed

CHOST="$(portageq envvar CHOST)"

# This is the lowest we want to go in this particular case.
MINIMUM_GCC="4.4.6"

env_setup() {
  GCC_VERSIONS="$(gcc-config -l | grep "${CHOST}" | \
                  cut -f3 -d' ')"
  GCC_LATEST="$(gcc-config -l | grep "${CHOST}" | tail -n1 | \
                  cut -f3 -d' ')"
}

env_setup

if ! [ "$(portageq match / ">=sys-devel/gcc-${MINIMUM_GCC}")" ];
then
  info "You don't have the latest gcc installed, trying to build it"
  if ! sudo emerge -u --getbinpkg sys-devel/gcc; then
    error "Emerging gcc failed. Please recreate your chroot."
    exit 1
  fi
  if ! [ "$(portageq match / ">=sys-devel/gcc-${MINIMUM_GCC}")" ];
  then
    error "You still don't have the latest gcc. Something is very"
    error "wrong with your tree. Recreating your chroot will likely fix it."
    exit 1
  fi
fi

env_setup

info "Updating the host toolchain. crosbug.com/19613"
info "Currently installed host gcc versions: $(echo -n ${GCC_VERSIONS})"

if ! sudo gcc-config "${GCC_LATEST}"; then
  error "gcc-config failed. This is really bad. Recreate your chroot."
  exit 1
fi

info "Cleaning up the old toolchain"
sudo emerge --unmerge "<sys-devel/gcc-${MINIMUM_GCC}"

exit 0
